#include <iostream>
#include <stdio.h>
using namespace std;

class A{
public:
    A()
    {
        a=0;
    }
    A(int t)
    {
        this->a=t;
    }
  //成员函数，省略左值。返回匿名对象
    A add(A &aa2)
    {
        A temp(this->a=this->a+aa2.a);
        return temp;
    }
//函数返回引用，return *this       
    A& add1(A &aa2)
    {
        this->a=this->a+aa2.a;
        return *this;
    }
        
    void getA()
    {
        printf("%d\n",this->a);
    }
        
public:
    int a;  
};

void getA(A *pa)
{
    printf("%d\n",pa->a);
}
//全局函数法
A add(A &aa1,A &aa2)
{
    A temp(aa1.a=aa1.a+aa2.a);
    return temp;
}

A& add1(A &aa1,A &aa2)
{
    aa1.a=aa1.a+aa2.a;
    return aa1;
}

int main()
{
    A aa(1);
    A bb(5);
    A cc;
    
    bb.add(aa);
    bb.getA();
    
    cc=add(aa,bb);
    cc.getA();
    
    bb.add1(aa);
    getA(&bb);
    
    cc=add1(aa,bb);
    getA(&cc);

    return 0;
}